<?php
require_once $_SERVER['DOCUMENT_ROOT'].'/entities/NamedEntity.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/entities/DepartmentType.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/entities/Person.php';
require_once $_SERVER['DOCUMENT_ROOT'].'/entities/Employee.php';
/**
 * Класс для работы со структурными подразделениями
 */
class Department extends NamedEntity {
	/**
	 * Экземпляр класса DepartmentType - тип, к которому относиться структурное 
	 * подразделение
	 */
	private $type;
	/** Экземпляр класса Employee - руководитель структурного подразделения */
	private $head;
	/**
	 * Экземпляр класса Department - структурное подразделение, в состав которого
	 * входит данное структурное подразделения
	 */
	private $parent;
	/**
	 * Массив экземпляров класса Department - структурные подразделения, входящие
	 * в состав данного структурного подразделения
	 */
	private $children = array();
	/**
	 * Метод, возвращающий структурное подразделение, в состав которого входит данное
	 * структурное подразделения
	 * @return $this->parent Родительское структурное подразделение
	 */
	public function getParent() {
		return $this->parent;
	}
	/**
	 * Метод, устанавливающий значение структурного подразделения, в состав которого
	 * входит данное структурное подразделения
	 * @param Department $parent Значение родительского структурного подразделения
	 */
	public function setParent(Department $parent) {
		$this->parent = $parent;
	}
	/**
	 * Метод, возвращающий экземпляр класса DepartmentType - тип, к которому относиться 
	 * структурное подразделение
	 * @return $this->type Тип структурного подразделение
	 */
	public function getType() {
		return $this->type;
	}
	/**
	 * Метод, устанавливающий значение типа, к которому относиться структурное 
	 * подразделение
	 * @param DepartmentType $type Значение типа структурного подразделения
	 */
	public function setType(DepartmentType $type) {
		$this->type = $type;
	}
	/**
	 * Метод, возвращающий значение экземпляра класса Employee - руководителя 
	 * структурного подразделения
	 * @return $this->head Руководитель структурного подразделения
	 */
	public function getHead() {
		return $this->head;
	}
	/**
	 * Метод, устанавливающий значение руководителя структурного подразделения
	 * @param Employee $head Значение руководителя структурного подразделения
	 */
	public function setHead(Employee $head) {
		$this->head = $head;
	}
	/**
	 * Метод, возвращающий массив экземпляров класса Department - структурные 
	 * подразделения, входящие в состав данного структурного подразделения
	 * @return $this->children Массив экземпляров класса Department
	 */
	public function getChildren() {
		return $this->children;
	}
	/**
	 * Метод, добавляющий значения в массив экземпляров класса Department
	 * @param Department $child Новый потомок экземпляра класса структурного подразделения
	 */
	public function addChild(Department $child) {
		$this->children[] = $child;
	}
}
?>